1. Technical Field
The present invention relates in general to data processing, and in particular, to efficient serialization of mutable program objects
2. Description of the Related Art
In a typical enterprise Java® environment, a server services many clients contemporaneously. For example, in a typical online banking environment, numerous customers may each utilize a client application executing on a client device to make transactions within one or more of the customer's accounts with a financial institution. Each transaction entails a remote call to the server to effect a desired action, such as a balance inquiry, electronic bill payment, transfer of funds, or withdrawal, which in turn requires data to be communicated between the client device and server.
Distributed computing in a Java® enterprise edition (Java EE) environment such as the online banking environment discussed above makes use of either Remote Method Invocation—Java® Remote Method Protocol (RMI-JRMP) or Remote Method Invocation—Internet Inter-Orb Protocol (RMI-IIOP), both of which leverage Java® serialization. The term “serialization” is used in the art to describe the process of saving an object's state as a sequence of bytes. In the Java® language, whenever a local process wants to send an object to a remote process running in a remote machine, the local process will serialize the object into a sequence of bytes (i.e., an Intermediate Format) and then send the sequence to the remote process using sockets. The remote process then deserializes the Intermediate Format to create an exact object graph on the remote machine.
In the prior art, serialization is a resource and time consuming process that includes the following principal steps:                1. Traverse and store the object graph, starting with the most derived class until java.lang.Object is reached;        2. Write the class definition for the object graph to the output stream; and        3. Convert the fields in each serializable class to a binary format and write the same to the output stream.        
In current implementations, the Java® serialization process implements stream-based caching of the binary data. However, the stream cache is cleared each time the stream is closed or reset because there is presently no way of knowing whether or not mutable objects have changed. Consequently, the serialization process is carried out for an object even if the object is unchanged since it was last communicated between the client and server.